package com.yin.pool;

import java.util.concurrent.*;

public class Demo02 {
    public static void main(String[] args) {
        // 自定义线程池
        // 最大线程数到底如何定义
        // 1. CPU密集型，根据核数确定
        // 动态获取当前CPU核数
        int i1 = Runtime.getRuntime().availableProcessors();
        System.out.println("max core process :" + i1);

        // 2. IO密集型
        // 程序 多个大型任务  io非常占用资源！
        // 判断程序中十分耗IO的线程
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                2, // 核心线程数
                5, // 最大线程数
                60, // 保留时间
                TimeUnit.SECONDS, // 保留时间单位
                new LinkedBlockingQueue<>(3), // 阻塞等待队列
                //new ThreadPoolExecutor.AbortPolicy() // 队列满了还有人进来,不处理,抛出异常
                //new ThreadPoolExecutor.CallerRunsPolicy() // 哪来的去哪里
                //new ThreadPoolExecutor.DiscardOldestPolicy() // 队列满了,替换旧的,尝试和最早的竞争
                new ThreadPoolExecutor.DiscardPolicy() // 队列满了,丢掉新来的,不会抛出异常
        );

        try {
            for (int i = 0; i < 10; i++) {
                threadPoolExecutor.execute(() -> System.out.println(Thread.currentThread().getName()));
            }
        } finally {
            threadPoolExecutor.shutdown();
        }

    }
}
